#pragma once
#include <vector>
#include <utility>
#include <unordered_map>
#include "GraphData.h"

// 点的类型：二维坐标点
using Point = std::pair<double, double>;

// 骨架边：由两个点构成的线段
using EdgeSegment = std::pair<Point, Point>;

// 构造最小生成树
std::vector<EdgeSegment> computeMST(const std::vector<Point>& points);

// 加密骨架线段
std::vector<EdgeSegment> densifySkeletonEdgesAdaptive(const std::vector<EdgeSegment>& edges, double maxSegmentLength);

// 从聚类边中提取骨架线段
std::unordered_map<int, std::vector<EdgeSegment>> extractSkeleton(
    const std::vector<std::vector<Edge>>& clusteredEdges,
    const std::vector<Node>& nodes,
    const double maxSegmentLength);


void writeSkeletonToCsv(const std::unordered_map<int, std::vector<std::pair<Point, Point>>>& skeletons, const std::string& filepath);
